Traditionally, interaction between a user and a computing device was based on the computing device's ability to accept data from a user and, in response to the accepted data and computer-executable instructions executing on that computing device, generate one or more responses that would be provided to the user. Thus, the single computing device with which the user was interacting comprised all of the data and all of the computer-executable instructions relevant to processing that data and providing responses, based on the data, to the user.
As networks of computing devices have become ubiquitous, and, more importantly, as network bandwidth and throughput has increased, it has become more practical to enable the interaction between a user and a computing device to be based, at least in part, on data and computer-executable instructions that are resident on another, different, computing device that is separate and apart from the computing device with which the user is interacting, and which is communicationally coupled to that computing device via a network. Thus, for example, a user interacting with one computing device can direct a request to that computing device that will cause actions to ultimately be performed based on data residing on one or more other computing devices, and, indeed, to be performed by computer-executable instructions executing on one or more other computing devices. The results of such computation by one or more other computing devices can then be returned to the computing device with which the user is interacting in order for those results to be presented to the user.
Because of the ability of networked computing devices to perform computations for multiple, remotely located, users, a single networked computing device can be tasked by multiple users such that its ability to perform the requested computations within an acceptable period of time can be negatively impacted. To solve the performance penalty associated with having too many users tasking a single network computing device simultaneously, groups of networked computing devices are traditionally established such that any one computing device from among the group can be utilized to perform the actions requested by the user. A load balancing device can be implemented to monitor the computational load on any one network computing device and direct subsequent requests to those computing devices that are not as taxed. Because any one computing device can be utilized to perform the actions requested by the user, the networked computing devices are, essentially, homogenous in that they either already comprise all of the relevant computer-executable instructions and data necessary to perform the action requested by the user, or they can quickly and efficiently obtain the relevant computer-executable instructions and data necessary to perform the action requested by the user. Absent such homogeneity, traditional load balancing cannot be achieved.
Typically, the storage capacity required to retain computer-executable instructions that can be utilized to respond to user requests can be relatively minimal. For example, even large computer-executable application programs may only comprise a small fraction of the storage capacity of even a minimally equipped networked computing device. Similarly, in many cases, the amount of data required to respond to user requests can likewise be relatively minimal. For example, data enumerating all of the purchases the user has made through a network-based merchant may be sufficiently small that it can be copied from a centralized storage unit to the computing device executing the computer-executable instructions that can determine and generate the user's response within a relatively short time frame. Consequently, each networked computing device can be homogenously established with the relevant computer-executable instructions and with the communicational connection to a centralized storage unit that can retain the data for all users. Subsequently, as user requests arrive, they can be load balanced across the network computing devices and, as each device seeks to respond to a user's request, it can download the relevant data from the centralized storage unit, process it with the computer-executable instructions, and provide a response.
In some situations, however, the amount of data that may need to be accessed in order to respond to a user's request may be so voluminous that it cannot be copied on-the-fly. In such situations, traditional load-balancing cannot work because the homogenous computing devices required for traditional load-balancing would not be able to obtain the necessary data, such as from a centralized storage unit, in a sufficient amount of time to be able to respond to the user's request in a timely manner.